# Funktionen
def FormatChange(x):
x = x * (2**15) # Skalieren auf Q16.16 Bereich (optional leicht unter max)
x = x.astype(np.int32) # Als 32-Bit Integer interpretieren
input_data = x.view(np.uint32) # Für DMA als unsigned darstellen
return input_data
# Normierung Wichtig für .wav-Files!
def Normierung(x):
m = np.max(np.abs(x)) # Maxwert für Normalisierung
x_n = x / m
return x_n
def Transmission(input_data,ip_buffer):
# Festlegen der Größen
buffer_size = int(ip_buffer)
# print("Buffer Size: ", buffer_size)
input_data = FormatChange(Normierung(input_data))
data_size = int(len(input_data))
print('Data Size: ', data_size)
# Padding
pad = np.zeros(ip_buffer)
pad_frame = FormatChange(pad)
# print('Frame Length: ', len(pad_frame),' / ', 'Frame Type: ', type(pad_frame))
# Leere Buffer
input_buffer = allocate(shape=(buffer_size,), dtype=np.uint32)
output_buffer = allocate(shape=(buffer_size,), dtype=np.uint32)
# Padding Inputbuffer
input_buffer[:] = pad_frame
# Laden der Daten in Inputbuffer
input_buffer[: data_size] = input_data
# print('Input Buffer: ', input_buffer[: data_size])
# Senden un Empfangen der Daten
dma.sendchannel.transfer(input_buffer)
dma.recvchannel.transfer(output_buffer)
dma.sendchannel.wait()
dma.recvchannel.wait()
# check status
#print("Recv Status: ","Error: ", dma_recv.error, "Idle: ", dma_recv.idle, "Running: ", dma_recv.running)
#print("Send Status: ","Error: ", dma_send.error, "Idle: ", dma_send.idle, "Running: ", dma_send.running)
# print('Output Buffer: ', output_buffer[: data_size])
# Check for Error
if dma_recv.error == False and dma_send.error == False:
print('>>>> Transmission successful <<<<')
elif dma_recv.error == True or dma_send.error == True:
print('!!!>> Error in Transmission <<!!!')
# Umrechnen der Empfangenen Daten
output_data = np.array(output_buffer[: data_size]).view(np.int32) # zurück zu signed int32
# output_data = np.array(output_buffer).view(np.int32) Test des Kompletten Frame
y = output_data / (2**15)
# Buffer leeren
del input_buffer, output_buffer
print('Buffer Clear')
print('>-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-<')
return y
def Split2Packets(data,packet_size):
packets = []
for i in range(0, len(data), packet_size):
packet = data[i:i+packet_size]
packets.append(packet)
return packets